package com.mashibing.mashibing;

import java.util.concurrent.BlockingQueue;
import java.util.concurrent.SynchronousQueue;

/**
 * SynchronousQueue容量为0，就是这个东西它不是用来装内容的，SynchronousQueue是专门用来两个线程之间传内容的，
 * 给线程下达任务的，老师讲过一个容器叫Exchanger还有印象吗，本质上这个容器的概念是一样的。
 *
 * 这个Queue和其他的很重要的区别就是你不能往里头装东西，只能用来阻塞式的put调用，
 * 要求是前面得有人等着拿这个东西的时候你才可以往里装，但容量为0，其实说白了就是我要递到另外一个的手里才可以。
 */
public class T_SynchronusQueue {

    public static void main(String[] args) throws InterruptedException {
        BlockingQueue<String> strs = new SynchronousQueue<>();

        new Thread(() -> {
            try {
                System.out.println(strs.take());
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }).start();

        //阻塞等待消费者消费
        strs.add("aaa");
        strs.put("bbb");
        strs.add("aaa");
        System.out.println(strs.size());
    }

}
